package com.jiantong.lawEnforcing.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
import io.terminus.common.utils.JsonMapper;
import lombok.Data;

import java.io.IOException;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;

/**
 * 案件基础信息表
 * Created by mz03 on 2017/8/8.
 */
@Data
public class CasesInformation implements Serializable {
    private static final long serialVersionUID = 6689551470148063896L;
    private static final ObjectMapper objectMapper= JsonMapper.nonEmptyMapper().getMapper();

    /**
     * 主键id
     */
    private Long id;

    /**
     * 案号
     */
    private String cases_id;

    /**
     * 案件编号,案件的外码,包含案件的地区信息
     */
    private String cases_number;

    /**
     * 案件类型:1较轻案件; 2一般案件;
     */
    private Integer cases_type;

    /**
     * 案由
     */
    private String cause_action;

    /**
     * 案件来源
     * 1,检查发现; 2,群众举报; 3,群众投诉; 4,上级交办;
     * 5,有关部门移送; 6,媒体曝光;7,监督抽检;
     */
    private Integer cases_source;

    /**
     * 案件登记人id
     */
    private Long receiver_id;

    /**
     * 指派到的人id
     */
    private Long designate_id;


    /**
     * 当事人类型(个人\单位)
     */
    private Integer parties_type;

    /**
     * 个人姓名
     */
    private String personage_name;

    /**
     * 个人电话
     */
    private String personage_phone;

    /**
     * 个人性别
     */
    private Integer gender;

    /**
     * 个人年龄
     */
    private Integer age;

    /**
     * 个人身份证
     */
    private String personage_ID;

    /**
     * 个人地址
     */
    private String personage_address;

    /**
     * 单位名称
     */
    private String organization_name;

    /**
     * 单位法定代表人
     */
    private String organization_corporate;

    /**
     * 单位地址
     */
    private String organization_address;

    /**
     * 单位电话
     */
    private String organization_phone;



    /**
     * 状态: 0,暂存(未规定案件类型); 10,已经得到指派; 20,案件已定性(文书开始制作); 30立案未审批; 40案件已审批通过; 50案件审批为通过(完结); 50当场处罚未处理; 60结案(当场已处罚)(完结状态文书制作结束)
     */
    private Integer status;

    /**
     * 案件定性时间(对应文书条件中的启动时间)
     */
    private Date cause_affirm_date;

    /**
     * 案件完结时间(终止时间)
     */
    private Date cause_end_date;

    /**
     * 案件备注说明 用于文书
     */
    private Integer remark;


    /**
     * 案件简要情况
     */
    private String cases_brief;

    /**
     * 承办人意见
     */
    private String undertaker_opinion;

    /**
     * 承办机构审核意见
     */
    private String undertake_organization_opinion;

    /**
     * 法制机构审核意见
     */
    private String law_institutions_opinion;

    /**
     * 行政机关负责人审批意见
     */
    private String administrativer_opinion;


    /**
     * 违法事实
     */
    private String incident_description;

    /**
     * 处罚依据以及内容
     */
    private String punishment;

    /**
     * 告知截止纠正时间
     */
    private Date inform_date;

    /**
     * 告知交罚款的地点
     */
    private String inform_site;

    /**
     * 可申请复议的农业局名
     */
    private String inform_agricultural;

    /**
     * 可提起诉讼的人民法院
     */
    private String inform_court;

    /**
     * 执法人名字
     */
    private String enforcement_name;

    /**
     * 执法人证件号
     */
    private String enforcement_certificate;


    /**
     * 处罚证书照片 不存数据库
     */
    private Map<String , String> picture_map;

    /**
     * 处罚证书照片
     */
    @JsonIgnore
    private String picture_json;

    /**
     * 证件照(身份证或营业执照) 不存数据库
     */
    private Map<String,Map<String,Object>> information_picture_map;

    /**
     *证件照(身份证或营业执照)
     */
    private  String information_picture_json;


    /**
     * 删除标志 1:正常; -1:删除
     */
    private String delete_flag;

    /**
     * 创建时间
     */
    private Date created_at;

    /**
     * 更新时间
     */
    private Date update_at;


    public void setPicture_map(Map<String,String> picture_map){
        this.picture_map = picture_map;
        if(picture_map == null || picture_map.isEmpty()){
            this.picture_json = null;
        }else {
            try {
                this.picture_json = objectMapper.writeValueAsString(picture_map);
            } catch (JsonProcessingException e) {
                //ignore this fuck IOException
            }
        }
    }


    public void setPicture_json(String picture_json){
        this.picture_json = picture_json;

        if(Strings.isNullOrEmpty(picture_json)){
            this.picture_map = Maps.newHashMap();
        }else {
            try {
                this.picture_map = objectMapper.readValue(picture_json, new TypeReference<Map<String , String>>() {});
            } catch (IOException e) {
                //ignore this fuck IOException
            }
        }
    }


    public void setInformation_picture_map(Map<String,Map<String,Object>> information_picture_map){
        this.information_picture_map = information_picture_map;
        if(information_picture_map == null || information_picture_map.isEmpty()){
            this.information_picture_json = null;
        }else {
            try {
                this.information_picture_json = objectMapper.writeValueAsString(information_picture_map);
            } catch (JsonProcessingException e) {
                //ignore this fuck IOException
            }
        }
    }


    public void setInformation_picture_json(String information_picture_json){
        this.information_picture_json = information_picture_json;

        if(Strings.isNullOrEmpty(information_picture_json)){
            this.information_picture_map = Maps.newHashMap();
        }else {
            try {
                this.information_picture_map = objectMapper.readValue(information_picture_json, new TypeReference<Map<String , Map<String,Object>>>() {});
            } catch (IOException e) {
                //ignore this fuck IOException
            }
        }
    }




}
